//package com.yunhe.device.repository.base;
//
//import com.yunhe.device.domain.base.PointDataType;
//import com.yunhe.device.domain.base.PointMeasureType;
//import org.springframework.data.neo4j.annotation.Query;
//import org.springframework.data.neo4j.repository.Neo4jRepository;
//import org.springframework.data.repository.query.Param;
//import org.springframework.stereotype.Repository;
//
///**
// * 点号数据类型数据仓库
// * @desc 点号数据类型数据仓库定义
// * @author liuronglei
// */
//@Repository
//public interface PointDataTypeRepository extends Neo4jRepository<PointDataType, Long> {
//
//    /**
//     * 根据代码获得点号数据类型对象
//     * @param code 代码
//     */
//    @Query("match (n:PointDataType{code:{code}}) with n match p=(n)-[:POINTMEASURETYPE_OF|:ANALOGSTATUS_OF*0..1]-(m) return p, ID(n)")
//    PointDataType findByCode(@Param("code") Long code);
//
//    /**
//     * 根据编号获得点号数据类型对象
//     * @param name 编号
//     */
//    PointDataType findByName(String name);
//
//    /**
//     * 根据代码绑定四遥类型
//     * @param code 点号数据类型代码
//     * @param pointMeasureTypeCode 四遥类型代码
//     */
//    @Query("match(n:PointMeasureType),(m:PointDataType) where n.code={pointMeasureTypeCode} " +
//            "and m.code={code} create (m)-[:POINTMEASURETYPE_OF]->(n)")
//    void bindPointMeasureTypeByCode(@Param("code") Long code, @Param("pointMeasureTypeCode") Long pointMeasureTypeCode);
//
//    /**
//     * 根据代码解绑四遥类型
//     * @param code 点号数据类型代码
//     * @param pointMeasureTypeCode 四遥类型代码
//     */
//    @Query("match(m:PointDataType{code:{code}})-[r:POINTMEASURETYPE_OF]->(n{code:{pointMeasureTypeCode}}) delete r")
//    void unbindPointMeasureTypeByCode(@Param("code") Long code, @Param("pointMeasureTypeCode") Long pointMeasureTypeCode);
//
//    /**
//     * 解绑所有的四遥类型
//     * @param pointDataTypeCode
//     */
//    @Query("match(a:PointDataType{code:{pointDataTypeCode}})-[r:POINTMEASURETYPE_OF]->(p:PointMeasureType) delete r")
//    void unbindAllPointMeasureTypesByCode(@Param("pointDataTypeCode") Long pointDataTypeCode);
//
//    /**
//     *获取所有四遥类型（根据代码）
//     * @param pointDataTypeCode
//     * @return
//     */
//    @Query("match(a:PointDataType) where a.code={pointDataTypeCode} match(a)-[:POINTMEASURETYPE_OF]->(p) return p")
//    Iterable<PointMeasureType> getPointMeasureTypeByCode(@Param("pointDataTypeCode") Long pointDataTypeCode);
//
//    @Query("start m=node({id}),n=node({analogStatusId}) create(m)-[:ANALOGSTATUS_OF]->(n)")
//    void bindAnalogStatus(@Param("id") Long id, @Param("analogStatusId") Long analogStatusId);
//
//    @Query("start m=node({id}) match(m)-[r:ANALOGSTATUS_OF]->(n) delete r")
//    void unbindAnalogStatus(@Param("id") Long id);
//
//    @Query("match(p:PointDataType{code:{code}}) match(a:AnalogStatus{code:{analogStatusCode}}) " +
//            "create (p)-[:ANALOGSTATUS_OF]->(a)")
//    void bindAnalogStatusByCode(@Param("code") Long code, @Param("analogStatusCode") Long analogStatusCode);
//
//    @Query("match(p:PointDataType{code:{code}})-[r]->(a:AnalogStatus{code:{analogStatusCode}}) delete r")
//    void unbindAnalogStatusByCode(@Param("code") Long code, @Param("analogStatusCode") Long analogStatusCode);
//
//    @Query("match(p:PointDataType{code:{code}}) return p.frequency limit 1")
//    Long getFrequencyByCode(@Param("code") Long code);
//}